package com.wanho.java159.cb.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wanho.java159.cb.mapper.EmpMapper;
import com.wanho.java159.cb.po.Emp;
import com.wanho.java159.cb.po.EmpExample;
import com.wanho.java159.cb.vo.LoginVO;
import com.wanho.java159.common.util.JwtUtils;
import com.wanho.java159.common.util.MD5;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Emp 业务处理类
* @author ChaoFei.Zhang
* @date   2021-07-10
*/
@Service
@Transactional
public class EmpService {
    /**Emp数据访问层对象*/
    @Resource
    private EmpMapper empMapper ;

    /**
     * 根据账号 和 密码进行登录
     * @param loginVO
     * @return
     */
    public String login(LoginVO loginVO){
        EmpExample empExample = new EmpExample();
        //账号相同 密码进行md5加密后 比较
        empExample.createCriteria().andAccountEqualTo(loginVO.getUsername()).andPasswordEqualTo(MD5.encrypt(loginVO.getPassword())) ;
        List<Emp> empList = empMapper.selectByExample(empExample);
        if (empList.isEmpty()){
            return null ;
        }
        Emp emp = empList.get(0) ;
        return JwtUtils.createToken(emp.getId(),emp.getAccount()) ;
    }

    /**
     * 获得用户信息
     * @param token
     * @return
     */
    public Map<String,Object> info(String token){
        String userName = JwtUtils.getUserName(token);
        Map<String,Object> map = new HashMap<>(4);
        map.put("name",userName) ;
        map.put("roles",new String[]{"admin"}) ;
        map.put("introduction","管理员") ;
        map.put("avatar","https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif") ;
        return map ;
    }

    /**
    * 查询所有 Emp 状态为未删除 is_deleted=0 的数据
    * @return Emp所有的数据
    */
    public List<Emp> list(){
        EmpExample empExample = new EmpExample();
        //查询 数据表中 is_deleted = 0
        empExample.createCriteria().andIsDeletedEqualTo(false) ;
        return empMapper.selectByExample(empExample) ;
    }

    /**
    * 根据删除主键删除 Emp 逻辑删除 进行is_deleted=1的修改操作
    * @param id Emp的主键
    * @return true 删除成功  false 删除失败
    */
    public boolean remove(Long id){
        Emp emp = new Emp();
        emp.setId(id);
        emp.setIsDeleted(true);
        return empMapper.updateByPrimaryKeySelective(emp) > 0 ;
    }

    /**
    * 新增一条Emp记录
    * @param  emp 封装新增的数据
    * @return true 新增成功  false 新增失败
    */
    public boolean save(Emp emp){
        emp.setCreateTime(new Date());
        emp.setUpdateTime(new Date());
        emp.setIsDeleted(false);
        return empMapper.insert(emp)>0 ;
    }

    /**
    * 根据主键查询 Emp
    * @param id Emp的主键
    * @return null id不存在  返回Emp对象
    */
    public Emp get(Long id){
        return empMapper.selectByPrimaryKey(id) ;
    }

    /**
    * 修改一条Emp记录
    * @param  emp 封装修改的数据
    * @return true 修改成功  false 修改失败
    */
    public boolean update(Emp emp) {
        emp.setUpdateTime(new Date());
        return empMapper.updateByPrimaryKeySelective(emp)>0 ;
    }

    /**
    * 分页查询 Emp  如果有查询条件需要动态在方法体内添加条件
    * @param pageNum 页码
    * @param pageSize 分页跨度
    * @param emp 封装查询的数据
    * @return 分页对象
    */
    public PageInfo<Emp> listPage(Long pageNum, Long pageSize,Emp emp) {
        PageHelper.startPage(pageNum.intValue(),pageSize.intValue());
        EmpExample empExample = new EmpExample();
        EmpExample.Criteria criteria = empExample.createCriteria();
        return new PageInfo<>(empMapper.selectByExample(empExample));
    }
}